/* WCTranslation.java - A part of word card corresponds to a translation part * of a page (entry) in Wiktionary. * * Copyright (c) 2009-2011 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under EPL/LGPL/GPL/AL/BSD multi-license. */ package wiwordik.word_card; import wikokit.base.wikt.sql.TTranslationEntry; import wikokit.base.wikt.sql.TLang; import wikokit.base.wikt.sql.TTranslation; import wikokit.base.wikipedia.sql.Connect; import wikokit.base.wikipedia.language.LanguageType; import java.lang.*; import java.util.ArrayList; import java.util.List; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Insets; import javafx.scene.control.ListCell; import javafx.scene.text.Text; import javafx.scene.layout.VBox; import javafx.scene.control.ListView; import javafx.util.Callback; /*ObservableList<String> temp_words = FXCollections.observableArrayList( "chocolate", "salmon", "gold", "coral", "darkorchid", "darkgoldenrod", "lightsalmon", "black", "rosybrown", "blue", "blueviolet", "brown"); word_ListView.setItems(temp_words);*/ /** Translations consists of one meaning block translated to all languages. * * @see wikt.sql.TTranslation and wikt.word.WTranslation */ public class WCTranslation { /** Translation section (box) title, i.e. additional comment, * e.g. "fruit" or "apple tree" for "apple". * A summary of the translated meaning. */ String meaning_summary; /** Duplication of listview_trans.items[] ??? */ //TranslationEntryItem[] trans_entry_items; //TTranslationEntry[]; int trans_entry_items_size; /** Sets maximum and minimum height of the translation box. * * @param n number of items in the listview */ // float getTranslationBoxHeight(int n) void setMinMaxTranslationBoxHeight( ListView<TranslationEntryItem> listview_trans, int n) { float height; // assert: listview_trans.items.size == n > 0 if(0 == n || n < 1) return; // this line is not reachable float h = TranslationEntryItem.getHeight(); // the height of one item //System.out.println("WCTranslation:setMinMaxTranslationBoxHeight() h = " + h); if(n > 0 && n <= 9) { height = n*h; listview_trans.setMinHeight(height); listview_trans.setMaxHeight(height); //System.out.println("variant a-small) n = " + n); return; } height = 7*h; // too much entries listview_trans.setMinHeight(height); listview_trans.setMaxHeight(height); //System.out.println("variant a-huge) n = " + n); } ListView<TranslationEntryItem> listview_trans = new ListView(); public VBox group = new VBox(); /** Creates a translation part of word card, it corresponds to one meaning. * * @return true if there are any translations in this translation block. **/ public boolean create ( Connect conn, TTranslation _ttranslation, TLang _lang ) { meaning_summary = _ttranslation.getMeaningSummary(); TTranslationEntry[] trans_entries = TTranslationEntry.getByTranslation (conn, _ttranslation); // System.out.println("WCTranslation.create() _lang=" + _lang.getLanguage().toString() + "; trans_entries.length=" + trans_entries); List<TranslationEntryItem> data_trans = new ArrayList(); // listview_trans.items length =" + trans_entries.length); trans_entry_items_size = trans_entries.length; //trans_entry_items = new TranslationEntryItem[trans_entries.length]; for(int i=0; i< trans_entries.length; i++) { TTranslationEntry e = trans_entries[i]; LanguageType l = e.getLang().getLanguage(); String lang_name_value = l.getName(); String lang_code_value = l.getCode(); String translation_text = e.getWikiText().getText(); TranslationEntryItem item = new TranslationEntryItem(); item.create(lang_name_value, lang_code_value, translation_text); data_trans.add(item); } // TranslationEntryItem[] trans_entry_items = data_trans.toArray(); //insert trans_entry_items into listview_trans.items; ObservableList<TranslationEntryItem> data = FXCollections.observableArrayList(data_trans); listview_trans.setCellFactory(new Callback<ListView<wiwordik.word_card.TranslationEntryItem>, ListCell<wiwordik.word_card.TranslationEntryItem>>() { @Override public ListCell<wiwordik.word_card.TranslationEntryItem> call(ListView<wiwordik.word_card.TranslationEntryItem> list) { return new wiwordik.word_card.TranslationCell(); } }); listview_trans.setItems(data); setMinMaxTranslationBoxHeight(listview_trans, data.size()); // GUI right - indent for translation list words // top right bottom left group.setPadding(new Insets(0, 20, 0, 0)); Text t_meaning_summary = new Text(); t_meaning_summary.setText(meaning_summary); group.getChildren().addAll(t_meaning_summary); group.getChildren().addAll(listview_trans); return trans_entries.length > 0; } }